package com.satoken.controller;

import cn.dev33.satoken.annotation.SaCheckSafe;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.util.SaResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description 二级认证
 * @Author HuangGaoCan
 * @Date 2023/10/19 20:47
 **/

@RestController
@RequestMapping("/user")
public class UserSafeController {

    /**
     * @return cn.dev33.satoken.util.SaResult
     * @description 二级认证 删除方法
     * @author HuangGaoCan
     * @date 21:03 2023/10/19
     **/
    @RequestMapping("/deleteProject")
    public SaResult deleteProject() {
        StpUtil.checkSafe();
        if (StpUtil.isSafe()) {
            return SaResult.ok("二级认证 删除方法成功");
        }
        return SaResult.error("二级认证失败!");
    }

    /**
     * @param password
     * @return cn.dev33.satoken.util.SaResult
     * @Description 二级认证
     * @author HuangGaoCan
     * @date 20:59 2023/10/19
     **/
    @RequestMapping("/openSafe")
    public SaResult openSafe(String password) {
        if ("123456".equals(password)) {
            StpUtil.openSafe(120);
            return SaResult.ok("二级认证成功!");
        }
        return SaResult.error("二级认证失败!");
    }


    @SaCheckSafe("add")
    @RequestMapping("/addSafeMethod")
    public SaResult addSafe() {
        return SaResult.ok("add方法调用成功!");
    }

    @RequestMapping("/addSafe")
    public SaResult addSafe(String password) {
        if ("123456".equals(password)) {
            StpUtil.openSafe("add", 120);
            return SaResult.ok("add二级认证通过!");
        }
        return SaResult.error("add二级认证失败!");
    }

    @RequestMapping("/getTokenValueByLoginId")
    public SaResult getTokenValueByLoginId() {
        return SaResult.ok("获取指定账号10001的`tokenValue`值" + StpUtil.getTokenValueByLoginId("1001"));
    }

    @RequestMapping("/switchTo")
    public SaResult switchTo() {
        StpUtil.switchTo("10002");
        return SaResult.data(StpUtil.getLoginId());

/*        System.out.println("------- [身份临时切换]调用开始...");
        StpUtil.switchTo(10044, () -> {
            System.out.println("是否正在身份临时切换中: " + StpUtil.isSwitch());  // 输出 true
            System.out.println("获取当前登录账号id: " + StpUtil.getLoginId());   // 输出 10044
        });
        System.out.println("------- [身份临时切换]调用结束...");
        return SaResult.data(StpUtil.getLoginId());*/
    }
}